Asynchronous Events এবং Callback Functions

Computer Programming - নোড জেএস (Node.js) - Events এবং Event Emitters (ইভেন্টস এবং ইভেন্ট ইমিটারস)
207

JavaScript এ Asynchronous (অ্যাসিনক্রোনাস) প্রোগ্রামিং এবং Callback Functions একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন আমাদের সার্ভার থেকে ডাটা আনা, ফাইল পড়া, বা নেটওয়ার্ক কলের মতো দীর্ঘস্থায়ী অপারেশনগুলি করতে হয়। এই অপারেশনগুলিকে অ্যাসিনক্রোনাসভাবে সম্পাদন করার ফলে সিস্টেমের পারফরম্যান্স উন্নত হয় এবং ব্যবহারকারীর অভিজ্ঞতা আরও দ্রুত হয়।

এখানে Asynchronous Events এবং Callback Functions এর ব্যাখ্যা দেওয়া হচ্ছে।


১. Asynchronous Events (অ্যাসিনক্রোনাস ইভেন্ট)

Asynchronous অপারেশনগুলির মধ্যে, একটি কাজ অন্য কাজের সাথে একসাথে চলতে থাকে, যার মানে হল যে আপনি একটি অপারেশন শুরু করার পর, অন্য কোন কাজ করার জন্য কোড চলতে থাকবে এবং যখন সেই অপারেশনটি সম্পন্ন হবে, তখন ফলাফলটি উপস্থাপন করা হবে। এই পদ্ধতি non-blocking I/O মডেলকে সমর্থন করে, যেখানে দীর্ঘস্থায়ী অপারেশনগুলো (যেমন ডেটাবেস কল, ফাইল পড়া ইত্যাদি) কার্যকরীভাবে সম্পন্ন হতে পারে, এবং সিস্টেমের অন্যান্য অংশগুলোর কার্যক্রম থেমে যায় না।

উদাহরণ:

ধরা যাক, আপনি একটি ডাটা ফাইল থেকে পড়তে চান। যদি এটি synchronous (সিঙ্ক্রোনাস)ভাবে করা হয়, তবে সার্ভার অন্য কোন কাজ করতে পারবে না যতক্ষণ না সেই ফাইলটি পুরোপুরি পড়ে না। কিন্তু asynchronous পদ্ধতিতে, এটি অন্য কাজ করার সুযোগ দেয় যখন ফাইলটি পড়া হচ্ছে।


২. Callback Functions (কলব্যাক ফাংশন)

Callback Function হল একটি ফাংশন যা অন্য ফাংশনের প্যারামিটার হিসেবে পাস করা হয় এবং প্রথম ফাংশনটির কার্যক্রম শেষ হওয়ার পর সেটি কল (অথবা ট্রিগার) করা হয়। অ্যাসিনক্রোনাস অপারেশনগুলিতে কলব্যাক ব্যবহৃত হয়, যেখানে একটি অপারেশন শেষ হওয়ার পর কলব্যাক ফাংশনটি চালু হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি ফাংশন আছে fetchData() যা ২ সেকেন্ডে কিছু ডাটা ফেরত দিবে। এখানে, fetchData() ফাংশনটি একটি callback function পাস করবে, যাতে ডাটা ফেরত আসলে সেটি প্রক্রিয়া করা যাবে।

function fetchData(callback) {
    setTimeout(() => {
        const data = "Data fetched successfully!";
        callback(data);  // callback function call
    }, 2000);
}

function processData(data) {
    console.log("Processing: " + data);
}

// fetchData এর মাধ্যমে কলব্যাক ফাংশনটি পাস করা হচ্ছে
fetchData(processData);

এখানে, fetchData() একটি অ্যাসিনক্রোনাস ফাংশন, যা ২ সেকেন্ড পরে processData() নামক callback ফাংশনটি কল করবে।

কলব্যাক ফাংশনের মূল কার্যাবলী:

  1. অ্যাসিনক্রোনাস কার্যকলাপ: কলব্যাক ফাংশন অ্যাসিনক্রোনাস অপারেশন শেষ হওয়ার পর কল করা হয়।
  2. ডাটা প্রসেসিং: একবার অ্যাসিনক্রোনাস কার্যক্রম সম্পন্ন হলে, কলব্যাক ফাংশনটি ডাটা প্রসেসিং বা পরবর্তী কার্যক্রম পরিচালনা করতে পারে।

৩. Callback Hell (কলব্যাক হেল)

একাধিক অ্যাসিনক্রোনাস অপারেশন একে অপরের মধ্যে কলব্যাক হিসেবে সংযুক্ত হলে, কোডটি জটিল এবং পঠনযোগ্য হতে পারে, যা Callback Hell (বা Pyramid of Doom) নামক সমস্যার সৃষ্টি করে। এখানে, একটি কলব্যাক ফাংশনের ভিতর অন্য একটি কলব্যাক ফাংশন থাকে এবং এটি বহু স্তরে চলে যায়, ফলে কোডটি অনেক জটিল হয়ে ওঠে।

উদাহরণ (Callback Hell):

fetchData((data) => {
    processData(data, (result) => {
        saveData(result, (savedData) => {
            sendConfirmation(savedData, (confirmation) => {
                console.log(confirmation);
            });
        });
    });
});

এখানে, একের পর এক কলব্যাক প্যাসিং করা হচ্ছে, যা কোডটিকে পিরামিডের মতো দেখতে করতে পারে। এটি বড় এবং জটিল অ্যাসিনক্রোনাস কোডে সমস্যার সৃষ্টি করে, যা পরবর্তীতে রক্ষণাবেক্ষণ এবং বুঝতে অসুবিধা হতে পারে।


৪. Promises (প্রমিসেস)

Promises হল Callback Hell সমস্যা সমাধানের জন্য একটি শক্তিশালী পদ্ধতি। প্রমিসেসের মাধ্যমে অ্যাসিনক্রোনাস অপারেশনকে আরও পরিষ্কার এবং সহজভাবে পরিচালনা করা যায়। একটি প্রমিসের তিনটি অবস্থা থাকে: pending (অপেক্ষমাণ), fulfilled (সম্পন্ন), এবং rejected (বাতিল)।

উদাহরণ:

function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const data = "Data fetched successfully!";
            resolve(data);  // Promise fulfilled
        }, 2000);
    });
}

fetchData().then(data => {
    console.log("Processing: " + data);
}).catch(error => {
    console.log("Error: " + error);
});

এখানে, fetchData() ফাংশনটি একটি Promise ফেরত দেয় এবং then() এবং catch() ব্যবহার করে ফলাফল বা ত্রুটি হ্যান্ডলিং করা হয়।


৫. Async/Await (অ্যাসিঙ্ক/অওয়েট)

Async/Await হল ES2017 (ES8) তে পরিচিত একটি সিনট্যাক্স, যা Promises ব্যবহারের উপর ভিত্তি করে কাজ করে, তবে এটি আরও সহজ এবং সিনক্রোনাস কোডের মতো দেখতে হয়।

উদাহরণ:

async function fetchData() {
    const data = await new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Data fetched successfully!");
        }, 2000);
    });
    console.log("Processing: " + data);
}

fetchData();

এখানে, await কিওয়ার্ডটি Promise এর ফলাফল আসা পর্যন্ত অপেক্ষা করে এবং তারপর এটি সিনক্রোনাস কোডের মতো কাজ করে, তবে এটি অ্যাসিনক্রোনাস কাজই করছে।


সারাংশ

  • Asynchronous Programming: অ্যাসিনক্রোনাস প্রোগ্রামিংয়ের মাধ্যমে দীর্ঘস্থায়ী অপারেশনগুলি যেমন ডাটাবেস কল, ফাইল পড়া, ইত্যাদি কার্যক্রম সিস্টেমের অন্য কাজগুলোকে ব্লক না করে সম্পন্ন করা যায়।
  • Callback Functions: অ্যাসিনক্রোনাস কার্যক্রম শেষ হওয়ার পর কলব্যাক ফাংশন কল হয় এবং পরবর্তী কাজ পরিচালনা করে।
  • Callback Hell: একাধিক কলব্যাক ফাংশন একসাথে ব্যবহারের ফলে কোড জটিল হয়ে যায়, যাকে Callback Hell বলা হয়।
  • Promises: Promises হল অ্যাসিনক্রোনাস অপারেশনগুলির জন্য একটি পরিষ্কার এবং পরিচালনাযোগ্য সমাধান।
  • Async/Await: Async/Await, Promises এর ওপর ভিত্তি করে সহজ এবং পরিষ্কার সিনট্যাক্স প্রদান করে, যা অ্যাসিনক্রোনাস কোডকে আরও সহজ করে তোলে।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...